/* Autore: Nicola Agosti */
/*
Questo programma chiede all'utente di inserire due stringhe e le utilizza per mostrare il 
funzionamento delle principali funzioni della libreria "string.h".
*/

#define _CRT_SECURE_NO_WARNINGS /* Necessario se utilizziamo Visual Studio */

#include <stdio.h>
#include <stdlib.h>

/* Libreria di funzioni standard per la manipolazione delle stringhe */
#include <string.h>

#define MAX_CARATTERI 100

int main()
{
	char str_1[MAX_CARATTERI + 1], str_2[MAX_CARATTERI + 1], str_3[2 * MAX_CARATTERI + 1];
	int lungStringa_1, lungStringa_2, risConfronto;
	
	/* Inserimento due stringhe */
	printf("Inserisci la prima stringa: ");
	fgets(str_1, MAX_CARATTERI + 1, stdin);
	printf("Inserisci la seconda stringa: ");
	fgets(str_2, MAX_CARATTERI + 1, stdin);

	/* Funzione: strlen(str) */
	/* Funzione che ritorna il numero di caratteri contenuti nella stringa "str" */
	lungStringa_1 = strlen(str_1);
	lungStringa_2 = strlen(str_2);
	printf("\n\nFunzione: strlen");
	printf("\nLunghezza della prima stringa: %d", lungStringa_1);
	printf("\nLunghezza della seconda stringa: %d", lungStringa_2);

	/* !!! ATTENZIONE !!!*/
	/*
	Come avete notato la lunghezza della stringa ritornata dalla funzione "strlen" sembra 
	essere sbagliata (è incrementata di uno rispetto a quanto dovrebbe essere)... ciò
	accade perchè la funzione "fgets" salva nella stringa letta, se è presente, anche
	il carattere '\n'... se non si vuole ciò bisogna eliminarlo "a mano".
	*/
	/* Elimino il carattere '\n' se è presente nella stringa */
	if (str_1[strlen(str_1) - 1] == '\n')
	{
		str_1[strlen(str_1) - 1] = '\0';
	}
	if (str_2[strlen(str_2) - 1] == '\n')
	{
		str_2[strlen(str_2) - 1] = '\0';
	}

	/* Ricalcolo la lunghezza delle stringhe dopo aver rimosso il carattere '\n' */
	lungStringa_1 = strlen(str_1);
	lungStringa_2 = strlen(str_2);
	printf("\nLunghezza della prima stringa dopo aver rimosso il \'\\n\': %d", lungStringa_1);
	printf("\nLunghezza della seconda stringa dopo aver rimosso il \'\\n\': %d", lungStringa_2);

	/* Funzione: strcpy(copia, originale) */
	/* Copia la stringa "originale" nella stringa "copia" */
	strcpy(str_3, str_1);
	printf("\n\nFunzione: strcpy");
	printf("\nStringa originale: %s", str_1);
	printf("\nStringa copiata: %s", str_3);

	/* Funzione: strcat(originale, stringaDaAggiungere) */
	/* Aggiunge, al termine della stringa "originale", la strnga "stringaDaAggiungere" */
	printf("\n\nFunzione: strcat");
	printf("\nStringa originale: %s", str_3);
	printf("\nStringa da aggiungere: %s", str_2);
	strcat(str_3, str_2);
	printf("\nStringa concatenata: %s", str_3);

	/* Funzione: strcmp(str_1, str_2) */
	/*
	Confronta le due stringhe e ritorna: 
	  0: se le due stringhe sono uguali;
	  <0: se la prima stringa precede in ordine alfabetico la seconda;
	  >0: se la prima stringa succede in ordine alfabetico la seconda.

	ATTENZIONE: il confronto è "case sensitive" (le lettere maiuscole precedono sempre le lettere minuscole).
	*/
	risConfronto = strcmp(str_1, str_2);
	printf("\n\nFunzione: strcmp");
	if (risConfronto == 0)
	{
		printf("\nLe due stringhe sono uguali.");
	}
	else
	{
		if (risConfronto < 0)
		{
			printf("\nLa prima stringa precede in ordine alfabetico la seconda.");
		}
		else
		{
			printf("\nLa prima stringa succede in ordine alfabetico la seconda.");
		}
	}

	return 0;
}